package com.manfred.JNDIStudy.search;

import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.directory.Attributes;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.BasicAttributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;

/**
 * Demonstrates how to perform a search by specifying a set of attributes to be
 * matched. Returns all attributes of objects that contain those matching
 * attributes.
 *
 * usage: java SearchRetAll
 */
class SearchRetAll {
	public static void main(String[] args) {

		// Set up the environment for creating the initial context
		Hashtable<String, Object> env = new Hashtable<String, Object>(11);
		env.put(Context.INITIAL_CONTEXT_FACTORY,
				"com.sun.jndi.ldap.LdapCtxFactory");
		env.put(Context.PROVIDER_URL, "ldap://localhost:10389/o=JNDITutorial");

		try {
			// Create initial context
			DirContext ctx = new InitialDirContext(env);

			// Specify the attributes to match
			// Ask for objects with the surname ("sn") attribute
			// with the value "Smith"
			// and the "mail" attribute.
			Attributes matchAttrs = new BasicAttributes(true); // ignore case
			matchAttrs.put(new BasicAttribute("sn", "Dubin"));
			matchAttrs.put(new BasicAttribute("mail"));

			// Search for objects that have those matching attributes
			NamingEnumeration answer = ctx.search("ou=People", matchAttrs);

			// Print the answer
			Search.printSearchEnumeration(answer);

			// Close the context when we're done
			ctx.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}